package BDD.gestionnaires; 

import javax.ejb.Stateless;

import java.util.Collection;  
import javax.ejb.Stateless;  
import javax.persistence.EntityManager;  
import javax.persistence.PersistenceContext;  
import javax.persistence.Query;  
import BDD.modeles.*;  
import java.util.ArrayList;

/**
 * @version 1.0.0
 * @author AZRIA Nouriel
 */
@Stateless
public class GestionnaireUtilisateur_AlbumPartage {

    // Ici injection de code : on n'initialise pas. L'entity manager sera créé  
    // à partir du contenu de persistence.xml  
    @PersistenceContext  
    private EntityManager em;
    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    
    /* LES METHODES */
    
    public Utilisateur_AlbumPartage creeUtilisateur_AlbumPartage(Utilisateur utilisateurVisionnant, Album album) {  
        
        // Creer l'album partage
        Utilisateur_AlbumPartage p = new Utilisateur_AlbumPartage(utilisateurVisionnant, album);

        // Connecter les objets
        Album aConnecte = em.merge(album);
        Utilisateur uConnecte = em.merge(utilisateurVisionnant);
        
        aConnecte = em.find(Album.class, aConnecte.getId());
        uConnecte = em.find(Utilisateur.class, uConnecte.getId());
        
        // Ajouter l'album partage chez les objets
        aConnecte.addUtilisateur_AlbumPartages(p);
        uConnecte.addUtilisateur_AlbumPartages(p);
          
        // On persiste
        em.persist(p);  
        return p;  
    }  
  
    public Collection<Utilisateur_AlbumPartage> getAllUtilisateur_AlbumPartages() {  
        // Exécution d'une requête équivalente à un select *  
        Query q = em.createQuery("select p from Utilisateur_AlbumPartage p");  
        return q.getResultList();  
    }
    
    public Collection<Album> getAlbumPartagesOfUser(Utilisateur user0){  

        Utilisateur user = em.merge(user0);
        
        Utilisateur u = em.find(Utilisateur.class, user.getId());
                
        Collection<Utilisateur_AlbumPartage> colAlbPartage = u.getUtilisateur_AlbumPartages();
        
        Collection<Album> colRet = new ArrayList<Album>();
        for(Utilisateur_AlbumPartage up : colAlbPartage)
            colRet.add(em.merge(up.getAlbum()));

        
        return colRet;  
    } 
    
}
